#ifndef __HB_FILEIO_H__
#define __HB_FILEIO_H__


// 設定ファイル読み取り
static int H_GetINIInt(char* node, char* element, int vain, char* filename);
static long H_GetINIString( char* node, char* element, char* vain, char* val, int maxsize, char* filename );




#ifdef WINNT
// WIN場合は対応の関数がある
// int
static int H_GetINIInt(char* node, char* element, int vain, char* filename)
{
	return GetPrivateProfileInt( node, element, vain, filename );
}

// string
static long H_GetINIString( char* node, char* element, char* vain, char* val, int maxsize, char* filename )
{
	return GetPrivateProfileString( node, element, vain, val, maxsize, filename );
}
#endif /* WINNT */

#ifdef LINUX
// int
static int H_GetINIInt(char* node, char* element, int vain, char* filename)
{
	int ret;
	char tmp[1024];

	if( H_GetINIString( node, element, "", tmp, sizeof(tmp), filename ) != 0 )
	{
		ret = vain;
	}
	else
	{
		ret = atoi( tmp );
	}

	return ret;
}

// string
// return  0:OK 1:NG
static long H_GetINIString( char* node, char* element, char* vain, char* val, int maxsize, char* filename )
{
	FILE 			*fp;
	char 			szLine[maxsize];
	static 	char 	tmpNode[1024];
	int 			rtnval;
	int 			i;
	int 			flag;
	char			*tmp;
	int 			end;

	i = 0;
	flag = 0;
	end = 0;

	// ファイルオープン失敗
	if( (fp = fopen( filename, "r" )) == NULL )
	{
		strcpy( val, vain );
		return 1;
	}

	// データ読み取り
	while( !feof(fp) && end == 0 )
	{
		// 次の文字取得
		rtnval = fgetc(fp);

		if( rtnval == EOF )
		{
			// ファイル終了
			end = 1;
		}

		szLine[i++] = rtnval;

		// 改行すると、この行の内容を分析する
		if( rtnval == '\n' || rtnval == '\r' || rtnval == EOF )
		{
			// 終了符号
			szLine[--i] = '\0';

			i = 0;

			// = があるかどうかをチェックする
			tmp = strchr( szLine, '=' );

			if( ( tmp != NULL ) && ( flag == 1 ) )
			{
				// コメントを無視する
				if( '#' == szLine[0] )
				{
				}
				else if( '/' == szLine[0] )
				{
				}
				// elemet判断
				else if( strncmp( element, szLine, strlen( element ) ) == 0 ) 
				{
					// 目標を見つける
					strcpy( val, tmp + 1 );
					fclose( fp );
					return 0;
				}
			}
			else
			{
				// node判断
				strcpy( tmpNode, "[" );
				strcat( tmpNode, node );
				strcat( tmpNode, "]" );
				if( strncmp( tmpNode, szLine, strlen( tmpNode ) ) == 0 )
				{
					flag = 1;
				}
				else{
					if( '[' == szLine[0] )
					{
						// 別のノードに入ると、フラグクリア
						flag = 0;
					}
				}
			}
		}
	}

	// 目標は見つけない
	fclose( fp );
	return 1;
}

#endif /* LINUX */
#endif /* __HB_FILEIO_H__ */
